package com.je.app.view;

import java.awt.Component;
import java.awt.Dimension;

import javax.swing.JPanel;
import javax.swing.JSeparator;

import java.awt.Color;
import java.awt.Font;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.JTextField;

import com.je.app.control.ControlConfiguracion;
import com.je.app.control.ControlSesion;
import com.je.app.view.MainFrame.MessageType;

import java.awt.Insets;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;

public class Observaciones extends JPanel{
	private JTextField txtSesiones;
	private JTextField txtObservaciones;
	private JTable tablaObservaciones;
	private JTable tablaHabitaciones;
	private JTextField fieldSeleccioneHabitacion;
	private JTextField fieldNoHayObservaciones;
	private DefaultTableModel modelo;				
	private List <Object[]> observaciones;
	
	public Observaciones(Object[][] matrizNombres) {
		
		setSize(new Dimension(1024, 771));
		setLayout(null);
	
		observaciones = new ArrayList <Object[]>();
		fieldSeleccioneHabitacion = new JTextField();
		fieldSeleccioneHabitacion.setBounds(550, 100, 171, 27);
		add(fieldSeleccioneHabitacion);
		fieldSeleccioneHabitacion.setText("Seleccione una habitaci\u00F3n");
		fieldSeleccioneHabitacion.setMargin(new Insets(2, 14, 2, 2));
		fieldSeleccioneHabitacion.setHorizontalAlignment(SwingConstants.CENTER);
		fieldSeleccioneHabitacion.setFont(new Font("Tahoma", Font.ITALIC, 12));
		fieldSeleccioneHabitacion.setEditable(false);
		fieldSeleccioneHabitacion.setColumns(10);
		fieldSeleccioneHabitacion.setBorder(null);
		fieldSeleccioneHabitacion.setVisible(true);
		
		fieldNoHayObservaciones = new JTextField();
		fieldNoHayObservaciones.setBounds(550, 100, 171, 27);
		add(fieldNoHayObservaciones);
		fieldNoHayObservaciones.setText("No hay observaciones");
		fieldNoHayObservaciones.setMargin(new Insets(2, 14, 2, 2));
		fieldNoHayObservaciones.setHorizontalAlignment(SwingConstants.CENTER);
		fieldNoHayObservaciones.setFont(new Font("Tahoma", Font.ITALIC, 12));
		fieldNoHayObservaciones.setEditable(false);
		fieldNoHayObservaciones.setColumns(10);
		fieldNoHayObservaciones.setBorder(null);
		fieldNoHayObservaciones.setVisible(true);

		
		JSeparator separator_1 = new JSeparator();
		separator_1.setOrientation(SwingConstants.VERTICAL);
		separator_1.setForeground(Color.LIGHT_GRAY);
		separator_1.setBounds(28, 63, 1, 619);
		add(separator_1);
		
		JSeparator separator_3 = new JSeparator();
		separator_3.setOrientation(SwingConstants.VERTICAL);
		separator_3.setForeground(Color.LIGHT_GRAY);
		separator_3.setBounds(259, 63, 1, 619);
		add(separator_3);
		
		JSeparator separator_4 = new JSeparator();
		separator_4.setForeground(Color.LIGHT_GRAY);
		separator_4.setBounds(28, 681, 232, 1);
		add(separator_4);
		DefaultTableCellRenderer modelocentrar = new DefaultTableCellRenderer();
		DefaultTableCellRenderer modeloderecha = new DefaultTableCellRenderer();
		modelocentrar.setHorizontalAlignment(SwingConstants.CENTER);
		modeloderecha.setHorizontalAlignment(SwingConstants.RIGHT);
		
		txtSesiones = new JTextField();
		txtSesiones.setText("Habitaciones");
		txtSesiones.setMargin(new Insets(2, 14, 2, 2));
		txtSesiones.setHorizontalAlignment(SwingConstants.CENTER);
		txtSesiones.setFont(new Font("Tahoma", Font.PLAIN, 16));
		txtSesiones.setEditable(false);
		txtSesiones.setColumns(10);
		txtSesiones.setBorder(null);
		txtSesiones.setBounds(50, 54, 105, 20);
		add(txtSesiones);
		
		JSeparator separator = new JSeparator();
		separator.setBounds(29, 63, 231, 1);
		add(separator);
		
		txtObservaciones = new JTextField();
		txtObservaciones.setText("Observaciones");
		txtObservaciones.setMargin(new Insets(2, 14, 2, 2));
		txtObservaciones.setHorizontalAlignment(SwingConstants.CENTER);
		txtObservaciones.setFont(new Font("Tahoma", Font.PLAIN, 16));
		txtObservaciones.setEditable(false);
		txtObservaciones.setColumns(10);
		txtObservaciones.setBorder(null);
		txtObservaciones.setBounds(329, 54, 119, 20);
		add(txtObservaciones);
		
		JSeparator separator_2 = new JSeparator();
		separator_2.setBounds(305, 63, 662, 1);
		add(separator_2);
		
		JSeparator separator_5 = new JSeparator();
		separator_5.setOrientation(SwingConstants.VERTICAL);
		separator_5.setForeground(Color.LIGHT_GRAY);
		separator_5.setBounds(966, 63, 1, 619);
		add(separator_5);
		
		JSeparator separator_6 = new JSeparator();
		separator_6.setForeground(Color.LIGHT_GRAY);
		separator_6.setBounds(304, 681, 663, 1);
		add(separator_6);
		
		JSeparator separator_7 = new JSeparator();
		separator_7.setOrientation(SwingConstants.VERTICAL);
		separator_7.setForeground(Color.LIGHT_GRAY);
		separator_7.setBounds(304, 63, 1, 619);
		add(separator_7);


			JScrollPane scrollPane = new JScrollPane();
			scrollPane.setBorder(BorderFactory.createEmptyBorder());
			scrollPane.setBounds(315, 85, 641, 585);
			add(scrollPane);
			tablaObservaciones = new JTable();
			tablaObservaciones.setDefaultRenderer(Object.class,new IconCellRenderer());
			tablaObservaciones.setName("observaciones");
			tablaObservaciones.setModel(new DefaultTableModel(
					new Object[][] {
					},
					new String[] {
							"New column", "New column", "New Column","New Column"
					}

					){
				public boolean isCellEditable(int row, int column) {
					return false;
				}
			}
					);

			scrollPane.setViewportView(tablaObservaciones);
			tablaObservaciones.setBorder(null);
			tablaObservaciones.setTableHeader(null);
			tablaObservaciones.getColumnModel().getColumn(0).setPreferredWidth(80);
			tablaObservaciones.getColumnModel().getColumn(0).setMaxWidth(80);
			tablaObservaciones.getColumnModel().getColumn(1).setPreferredWidth(130);
			tablaObservaciones.getColumnModel().getColumn(1).setMaxWidth(130);
			tablaObservaciones.getColumnModel().getColumn(3).setMaxWidth(40);
			tablaObservaciones.setShowHorizontalLines(false);
			tablaObservaciones.setShowVerticalLines(false);
			tablaObservaciones.setRowHeight(50);
			tablaObservaciones.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
			tablaObservaciones.addMouseListener(new MouseListener(){

				@Override
				public void mouseClicked(MouseEvent arg0) {}

				@Override
				public void mouseEntered(MouseEvent arg0) {}

				@Override
				public void mouseExited(MouseEvent arg0) {}

				@Override
				public void mousePressed(MouseEvent arg0) {}

				@Override
				public void mouseReleased(MouseEvent arg0) {
					System.out.println(arg0.getX());
					int x1=593;
					int x2=630;
					int y1=10;
					int y2=35;
					int xAux = arg0.getX();
					int yAux = arg0.getY()%50;
					if(xAux>=x1 && xAux<=x2 && yAux>=y1 && yAux<=y2){
						int fila= tablaObservaciones.getSelectedRow();
						if(fila<=observaciones.size()){
							int id = new Integer(""+ observaciones.get(fila)[3]);
							boolean confirmado = MainFrame.getInstance().showMessage(MessageType.CONFIRMACION,null);
							if(confirmado){
								ControlConfiguracion.getInstance().eliminarObservacion(id);
								modelo.removeRow(fila);
								observaciones.remove(fila);
							}
						}
					}
				}});
			

			JScrollPane scrollPane_2 = new JScrollPane();
			scrollPane_2.setBounds(37, 85, 212, 585);
			scrollPane_2.setBorder(BorderFactory.createEmptyBorder());
			add(scrollPane_2);

			modelo = (DefaultTableModel) tablaObservaciones.getModel();
			
			tablaHabitaciones = new JTable();
			tablaHabitaciones.setName("habitaciones");
			tablaHabitaciones.setFont(new Font("Tahoma",Font.BOLD,12));
			tablaHabitaciones.setModel(new DefaultTableModel(
					matrizNombres,
					new String[] {
							"Habitaci\u00F3n"
					}
					) {
				public boolean isCellEditable(int row, int column) {
					return false;
				}
			});
			tablaHabitaciones.getColumnModel().getColumn(0).setResizable(false);
			tablaHabitaciones.setDefaultRenderer(Object.class,new IconCellRenderer());
			tablaHabitaciones.setBorder(null);
			tablaHabitaciones.setTableHeader(null);
			tablaHabitaciones.setRowHeight(50);
			tablaHabitaciones.setShowHorizontalLines(false);
			tablaHabitaciones.setShowVerticalLines(false);
			tablaHabitaciones.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
			tablaHabitaciones.addMouseListener(new MouseListener(){

				private Integer index;


				@Override
				public void mouseClicked(MouseEvent arg0) {}

				@Override
				public void mouseEntered(MouseEvent arg0) {}

				@Override
				public void mouseExited(MouseEvent arg0) {}

				@Override
				public void mousePressed(MouseEvent arg0) {}

				@Override
				public void mouseReleased(MouseEvent arg0) {
					int fila = tablaHabitaciones.getSelectedRow();
					if(fila>-1){
						fieldSeleccioneHabitacion.setVisible(false);
						fieldNoHayObservaciones.setVisible(false);
						
						while(modelo.getRowCount()>0) modelo.removeRow(0);
						
						String nombreHab = ""+tablaHabitaciones.getValueAt(fila, 0);
						observaciones = ControlSesion.getInstance().obtenerObservaciones(nombreHab);
						if(observaciones.size()==0) fieldNoHayObservaciones.setVisible(true);
						//Carga de datos de observaciones
						index = 0;
						for(Object[] row : observaciones){
						
							JScrollPane scrollPane_1 = new JScrollPane();
							JTextArea textArea = new JTextArea(""+row[2]);
							textArea.setEditable(false);
							textArea.setFont(new Font("Tahoma", Font.PLAIN, 12));
							textArea.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(), 
									BorderFactory.createEmptyBorder(5, 5, 5, 5)));
							scrollPane_1.setViewportView(textArea);
							textArea.setLineWrap(true);
							textArea.setWrapStyleWord(true);

							scrollPane_1.setBorder(null);
		

							
							final JLabel label = new JLabel();
							label.setOpaque(true);
	
							label.setIcon(new ImageIcon("src/main/resources/iconoEliminar.png"));
							label.setName(""+row[3]);

							      
							
		
							Object[] rowActual = new Object[]{row[0],row[1],scrollPane_1,label};
							modelo.addRow(rowActual);
							index++;

						}
					

						
					}
					
				}
				
			});
			scrollPane_2.setViewportView(tablaHabitaciones);
			
			
			
			



	}
	
	public class IconCellRenderer extends DefaultTableCellRenderer
	{

		public Component getTableCellRendererComponent (JTable table, Object value, boolean isSelected,boolean hasFocus, final int row, int column)
		{

			if ( row%2==1 ){
				this.setBackground(Color.WHITE);

			} else {

				this.setBackground(new Color(230,225,244));
			}

			if(value instanceof JScrollPane)
			{
				JScrollPane scroll = (JScrollPane)value;
				scroll.setToolTipText((String)((JTextArea)scroll.getViewport().getComponent(0)).getText());
				((JTextArea)scroll.getViewport().getComponent(0)).setForeground(Color.BLACK);
				if ( row%2==1 ){

					((JTextArea)scroll.getViewport().getComponent(0)).setBackground(Color.WHITE);
					

				} else {

					((JTextArea)scroll.getViewport().getComponent(0)).setBackground(new Color(230,225,244));
				}


				if(isSelected){
					((JTextArea)scroll.getViewport().getComponent(0)).setBackground(table.getSelectionBackground());
					((JTextArea)scroll.getViewport().getComponent(0)).setForeground(table.getSelectionForeground());
				}

				return scroll;
			}
			else if(value instanceof JLabel){
				final JLabel label = (JLabel) value;
				label.setToolTipText("Eliminar");

				if ( row%2==1 ){

					label.setBackground(Color.WHITE);
					

				} else {

					label.setBackground(new Color(230,225,244));
				}


				if(isSelected){
					label.setBackground(table.getSelectionBackground());

				}


				return label; 
			}
			else
			{
				
				setToolTipText((String)value);
				
				setHorizontalAlignment(SwingConstants.CENTER);
			
				if(table.getName().equals("habitaciones")){
					setVerticalAlignment(SwingConstants.CENTER);
				}
				return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
			}
		}

	}

}